package org.compiere.process;

import org.compiere.model.MClient;
import org.compiere.model.MMailText;
import org.compiere.model.MUser;
import org.compiere.model.X_AD_User;
import org.compiere.model.X_C_BPartner;
import org.compiere.model.X_R_MailText;
import org.compiere.model.X_cms_proposal;
import org.compiere.util.DB;
import org.compiere.util.EMail;

public class CMS_InformHeader extends SvrProcess {

	private int cms_proposal_ID = 0;
	
	@Override
	protected void prepare() {
		
		cms_proposal_ID = this.getRecord_ID();
	}

	@Override
	protected String doIt() throws Exception {

		X_cms_proposal proposal = new X_cms_proposal(getCtx(), cms_proposal_ID, get_TrxName());
		
		String sqlGetZerdeAdmin = "select max(ad_user_id) from ad_user where lower(name) like '%zerdea%'";
		
		int userIDFrom = 0;
		
		userIDFrom = DB.getSQLValue(get_TrxName(), sqlGetZerdeAdmin);

		if(userIDFrom == -1)
			throw new Exception("Не удалось загрузить данный системы");
		
		X_AD_User creator = new X_AD_User(getCtx(), proposal.getCreator_ID(), get_TrxName());
				
		int userIDTo = DB.getSQLValue(get_TrxName(), "SELECT AD_User_ID FROM AD_User WHERE isActive = 'Y' AND C_BPartner_ID = " +  proposal.getHR_Header_ID());
		
		if(userIDTo == -1)
			throw new Exception("Не заполненно поле: Руководитель департамента");
		
		String label = "Заявка на договор";
		String message = "";
		
		message += "Вам нужно согласовать заявку на разработку договора №";
		message += proposal.getDocumentNo() + "\n\r";

		if(creator != null)
		{
			message += "\nСоздатель заявки:\n";
			message += creator.getDescription();
		}
		
		this.sendMail(userIDTo, userIDFrom, label, message.toString());		
		return "Сообщение выслано";
	}
	
	private boolean sendMail(int userToID, int userFromID, String label, String message) throws Exception
	{
		MUser userFrom = new MUser(getCtx(), userFromID, get_TrxName());
		MUser userTo = new MUser(getCtx(), userToID, get_TrxName());

		MClient client = new MClient(getCtx(), getAD_Client_ID(), get_TrxName());
		
		X_R_MailText rText = new X_R_MailText(getCtx(), null, get_TrxName());		
		
		StringBuffer sql = new StringBuffer();
		sql.setLength(0);
	
		sql.append("select c_bpartner_id from ad_user where ad_user_id = " + userFromID);
		int C_BPartner_ID = DB.getSQLValue(get_TrxName(), sql.toString());
		
		if(C_BPartner_ID == -1)
			throw new Exception("Ошибка получения имени отправителя");
		
		X_C_BPartner bpartner = new X_C_BPartner(getCtx(), C_BPartner_ID, get_TrxName());
		
		rText.setName(bpartner.getName());
		rText.setMailHeader(label);
		rText.setMailText(message);
		
		if(!rText.save())
			throw new Exception("Невозможно сохранить сообщение");
		
		MMailText mailText = new MMailText(getCtx(), rText.get_ID(), get_TrxName());
		
		EMail mail = client.createEMail(userFrom, userTo, mailText.getMailHeader(), mailText.getMailText());	
		
		try 
		{
			EMail.SENT_OK.equals(mail.send());
		}
		catch(Exception e){}
		
		return true;
	}
}
